package cn.wolfcode.luowowo.service.impl;

import cn.wolfcode.luowowo.domain.StrategyTheme;
import cn.wolfcode.luowowo.query.StrategyThemeQuery;
import cn.wolfcode.luowowo.repository.StrategyThemeRepository;
import cn.wolfcode.luowowo.service.IRegionService;
import cn.wolfcode.luowowo.service.IStrategyThemeService;
import cn.wolfcode.luowowo.util.AssertUtil;
import cn.wolfcode.luowowo.util.DBHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.Optional;

@Service
//@Transactional  暂时先别管事务
public class StrategyThemeServiceImpl implements IStrategyThemeService {
    
    @Autowired
    private StrategyThemeRepository repository;
    
    @Autowired
    private MongoTemplate template;
    
    @Autowired
    private IRegionService regionService;
    
    //查询单个方法
    public StrategyTheme get(String id) {
        Optional<StrategyTheme> optional = repository.findById(id);
        if (optional.isPresent()) {
            return optional.get();
        }
        return null;
    }
    
    //条件查询
    //page对象里面包括: 总页数 每页显示条数......
    public Page<StrategyTheme> query(StrategyThemeQuery qo) {
        /*创建一个空的条件*/
        Query query = new Query();
    
        /*模糊高查*/
        if (StringUtils.hasLength(qo.getKeyword())) {
            /*通过name模糊查询*/
            query.addCriteria(Criteria.where("name").regex(".*" + qo.getKeyword() + ".*"));
        }
        //添加一个按照排序字段进行排序的条件
        PageRequest sequence = PageRequest.of((qo.getCurrentPage() - 1), qo.getPageSize(), (Sort.Direction.ASC), "sequence");
        /*工具类传进条件后 进行数据的排序与分页 排序不能用qo里面的,用排序字段进行排序*/
        return DBHelper.query(template, StrategyTheme.class, query, sequence);
        
    }
    /*查询全部的内容*/
    public List<StrategyTheme> list() {
        return repository.findAll();
    }
    
    

    /**
     * 删除方法
     * @param id 删除的id
     */
    @Override
    public void delete(String id) {
        repository.deleteById(id);
    }
    
    //编辑于添加的方法
    @Override
    public void saveOrUpdate(StrategyTheme strategyTheme) {
        //判空操作
        AssertUtil.hasLength(strategyTheme.getName(),"请输入攻略主题名称~");
        AssertUtil.intNotNull(strategyTheme.getSequence(),"请输入攻略主题的排序!");
       /* //先判断是否有id的存在,如果有就是编辑
        if (StringUtils.hasLength(strategyTheme.getId())){
            *//*编辑 这里的编辑也是全部修改 所以也是可以使用save*//*
            repository.save(strategyTheme);
        }else {
            *//*保存*//*
            repository.save(strategyTheme);
        }*/
        //mongodbrepository底层的save是会判断是否有id的 有id就会进行更新操作,没有就会进行添加操作 所以用一句就行
        repository.save(strategyTheme);
    }
    
}
